package com.ltedu.system.service;

import com.ltedu.system.domain.SysMenu;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ltedu.system.domain.dto.MenuNode;
import com.ltedu.system.domain.vo.RouterVO;
import com.ltedu.system.domain.vo.SysMenuVO;
import com.ltedu.system.domain.vo.TreeSelect;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 菜单信息 服务类
 * </p>
 *
 * @author Jerry
 * @since 2020-11-27
 */
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 保存菜单
     *
     * @param sysMenuVo
     * @return {@link Boolean}
     */
    Boolean save(SysMenuVO sysMenuVo);

    /**
     * 更新菜单
     *
     * @param sysMenuVo
     * @return {@link Boolean}
     */
    Boolean update(SysMenuVO sysMenuVo);

    /**
     * 菜单树列表
     *
     * @return {@link List<MenuNode>}
     */
    List<MenuNode> treeList();

    /**
     * 获取用户菜单权限
     *
     * @param userId 用户id
     * @return {@link Set<String>}
     */
    Set<String> getMenuPermsByUserId(Long userId);

    /**
     * 获取用户菜单树
     *
     * @param userId 用户id
     * @return {@link List<MenuNode>}
     */
    List<MenuNode> getMenuTreeByUserId(Long userId);

    /**
     * 构建前端菜单路由
     *
     * @param menuNodeList 菜单节点列表
     * @return {@link List<RouterVO>}
     */
    List<RouterVO> buildMenu(List<MenuNode> menuNodeList);

    /**
     * 获取角色菜单树
     *
     * @param roleId 角色id
     * @return {@link List<Long>}
     */
    List<Long> roleMenutreeList(Long roleId);

    /**
     * 构建前端菜单选项
     *
     * @param menuNodeList 菜单节点列表
     * @return {@link List<TreeSelect>}
     */
    List<TreeSelect> buildMenuTreeSelect(List<MenuNode> menuNodeList);

    /**
     * 判断是否包含子菜单
     *
     * @param menuId 菜单id
     * @return {@link Boolean}
     */
    Boolean hasChildByMenuId(Long menuId);

    /**
     * 判断菜单是否分配给角色
     *
     * @param menuId 菜单id
     * @return {@link Boolean}
     */
    Boolean checkMenuExistRole(Long menuId);
}
